package main

import (
	"flag"
	"fmt"
	"go-gateworker/internal/config"
	"go-gateworker/internal/hot"
	"go-gateworker/internal/logger"
	"go-gateworker/internal/proxy"
	"log"
	"os"
	"path/filepath"
)

func main() {
	// 命令行参数
	configFile := flag.String("config", "config.json", "配置文件路径")
	pidFile := flag.String("pid", "gateway.pid", "PID文件路径")
	flag.Parse()

	// 加载配置
	cfg, err := config.LoadConfig(*configFile)
	if err != nil {
		log.Fatalf("加载配置失败: %v", err)
	}
	
	// 初始化日志系统
	logger.Init(cfg)
	log := logger.GetLogger()
	log.Info("初始化网关...")

	// 确保PID文件目录存在
	pidDir := filepath.Dir(*pidFile)
	if pidDir != "." && pidDir != "/" {
		if err := os.MkdirAll(pidDir, 0755); err != nil {
			log.Fatalf("创建PID目录失败: %v", err)
		}
	}

	// 创建代理
	p := proxy.New(cfg, *configFile)
	
	// 创建支持热重启的服务器
	addr := fmt.Sprintf(":%d", cfg.Gateway.Port)
	graceful, err := hot.NewGracefulServer(addr, p, *pidFile)
	if err != nil {
		log.Fatalf("创建服务器失败: %v", err)
	}

	// 启动服务器
	log.Infof("网关已启动，监听端口: %d, PID: %d", cfg.Gateway.Port, os.Getpid())
	if err := graceful.Start(); err != nil {
		log.Fatalf("服务器启动失败: %v", err)
	}
}
